#ifndef ASTARHEURISTICS_H
#define ASTARHEURISTICS_H

#include <opencv/cv.h>

#include "graphstructures.h"

class AStarHeuristic {
public:
	virtual int expected(const Path &path, const cv::Point &goal) = 0;
};

class ManhattenDistanceHeuristic : public AStarHeuristic {
public:
	int expected(const Path &path, const cv::Point &goal);
};

class VoronoiHeuristic : public AStarHeuristic {
public:
	explicit VoronoiHeuristic(const cv::Mat &matrix);
	
	int expected(const Path &path, const cv::Point &goal);

private:
	cv::Mat m_matrix;
	int m_max;
};

#endif